package com.tanhua.server.controller;

import com.tanhua.server.service.TestSoulService;
import com.tanhua.server.vo.QuestionnairesVo;
import com.tanhua.server.vo.TestResultVo;
import com.tanhua.server.vo.TestSubmit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@RequestMapping("testSoul")
@RestController
public class TestSoulController {
    @Autowired
    private TestSoulService testSoulService;
    /**
     * 测灵魂-问卷列表（学生实战）
     *
     * @return
     */
    @GetMapping
    public ResponseEntity<List<QuestionnairesVo>> queryQuestionnaire() {
        try {
            List<QuestionnairesVo> list = this.testSoulService.queryQuestionnaire();
            return ResponseEntity.ok(list);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
    }

    /*@PostMapping
    public ResponseEntity<Void> submitQuestionnaire(@RequestBody String string){
        //也可以用字符串接收，然后调用第三方工具进行json反序列化，比较麻烦，不推荐。
        System.out.println(string);
        return ResponseEntity.ok(null);
    }*/

    /**
     * 测灵魂-提交问卷（学生实战）
     * @param map
     * @return
     */
    @PostMapping
    public ResponseEntity<String> submitQuestionnaire(@RequestBody Map<String,List<TestSubmit>> map){
        //这里获得了用户答题信息，计算用户得分，返回的是报告的id。
        //会在报告表插入得分和类型，并且会解锁下一级的关卡。
        //string.valueOf(long l)
        //业务尽可能写在业务层。控制层很精简的
        //问卷表应该是每个用户一条记录
        //确保每个用户只有一条记录，新增会执行一次，之后都是更新操作
        try {
            String reportId = this.testSoulService.saveTestResult(map);
            return ResponseEntity.ok(reportId);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
    }

    //先查最新的reportId,然后再去查其他表
    /**
     * 根据报告id查询报告表
     * @param reportId
     * @return
     */
    @GetMapping("report/{id}")
    public  ResponseEntity<TestResultVo> queryTestResult(@PathVariable("id") String reportId){

        try {
            //TODO应该是结合reportId和userId去查报告，否则会查到别人的报告
            TestResultVo testResultVo = this.testSoulService.queryTestResult(reportId);
            if (null != testResultVo) {
                return ResponseEntity.ok(testResultVo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
    }

}
